package com.hwd.srb.core.service;

import com.hwd.srb.core.pojo.entity.BorrowInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hwd.srb.core.pojo.vo.BorrowInfoApprovalVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 借款信息表 服务类
 * </p>
 *
 * @author 黄伟东/Victor
 * @since 2022-03-10
 */
public interface BorrowInfoService extends IService<BorrowInfo> {

    /**
     * 从请求头里获取JWT令牌token，再解析token获取userId
     * 根据userId获取当前用户借款额度
     *
     * @param userId 用户id
     * @return java.math.BigDecimal
     */
    BigDecimal getBorrowAmount(Long userId);

    /**
     * 提交借款申请
     *
     * @param borrowInfo 提交借款申请
     */
    void saveBorrowInfo(BorrowInfo borrowInfo);

    /**
     * 根据用户id获取借款申请审批状态
     *
     * @param userId 用户id
     * @return java.lang.Integer
     */
    Integer getBorrowInfoStatus(Long userId);

    /**
     * 借款信息列表
     *
     * @return java.util.List<com.hwd.srb.core.pojo.entity.BorrowInfo>
     */
    List<BorrowInfo> selectList();

    /**
     * 根据借款信息id获取借款信息
     *
     * @param borrowInfoId 借款信息id
     * @return java.util.Map<java.lang.String, java.lang.Object>
     */
    Map<String, Object> show(Long borrowInfoId);

    /**
     * 获取借款审核对象，进行审核
     * （插入数据，考虑幂等性），事物控制
     * 审核通过后：
     * 1）修改借款申请状态(borrow_info表)
     * 2）创建标的lend标的数据结构(lend表)
     *
     * @param borrowInfoApprovalVO 借款审核对象
     */
    void approval(BorrowInfoApprovalVO borrowInfoApprovalVO);
}
